package src.BlueBridge.GreedyStrategyAndDynamicProgramming;

import java.util.Scanner;

/**
    给定一个长为N的字符串S，构造一个字符串T，长度也为N

    起初，T是一个空串，随后反复进行下列任意操作

    1.从S的头部剔除一个字符，加到T的尾部
    2.从S的尾部剔除一个字符，加到T的尾部

    目标是最后生成的字符串T的字典序尽可能小

    1<=N<=2000
    字符串S只包含大写英文字母

    输入:字符串S
    输出:字符串T

    比如
    输入:ACDBCB
    输出:ABCBCD
    过程:
    头A尾B，双C无大小，则比较下一位，也就是B和D，则取C这边的B，尾C，尾B，头C和D

    还有一种办法，就是把S倒过来记为S'，从头开始比S和S'，直到T被填充满为止(限定了为n)
 */

public class _6字典序最小问题 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        StringBuilder sb = new StringBuilder();
        for (int i = 0 ; i < N ; i++) {
            sb.append(sc.next());
        }
        f(sb.toString());
    }

    public static void f(String s) {
        String s1 = new StringBuilder(s).reverse().toString();
        int N = s.length();
        StringBuilder rs = new StringBuilder();
        int count = 0;
        while (rs.length() < N) {
            // ifelse总归要取一个走，要么取s1头,要么取s的头
            if (s.compareTo(s1) <= 0) {
                rs.append(s.charAt(0));
                s = s.substring(1);
            }else {
                rs.append(s1.charAt(0));
                s1 = s1.substring(1);
            }
            // POJ要求每80个字符做一个换行
            if (rs.length() % 80 == 0) {
                System.out.println(rs.substring(count * 80, (count + 1) * 80));
                count++;
            }
        }
        if (rs.length() > count * 80) {
            System.out.println(rs.substring(count * 80));
        }
    }
}
